package com.itany.corejava.code10_异常;

/**
 * @author 石小俊
 * @date 2023年05月09日 13:59
 */
public class Test03_捕获多种异常 {

    public static void main(String[] args) {
        test02();
    }

    public static void test() {
        try {
            // 数据下标越界异常
            int[] nums = {1, 2, 3};
            System.out.println(nums[2]);

            // 算术异常
            int i = 1 / 1;

            // 空指针异常
            String name = null;
            System.out.println(name.equals("admin"));
        } catch (ArrayIndexOutOfBoundsException e) {
            // 由于try中的语句存在多种异常
            // 每一种异常的处理代码可能不一致
            // 因此,可以通过多个catch捕获这些异常
            // 捕获的时候先捕获小的异常,再捕获大的异常
            // 捕获多种异常时,从上向下执行捕获过程的
            // 如果先捕获大的,大的可能包含了多个小的,此时下面的就不会生效了
            // 如果先捕获大的,再捕获小的,会直接报错
            System.out.println("数组下标越界异常");
        } catch (ArithmeticException e) {
            System.out.println("算术异常");
        } catch (NullPointerException e) {
            System.out.println("空指针异常");
        } catch (RuntimeException e) {
            System.out.println("运行时异常");
        } catch (Exception e) {
            System.out.println("检查异常");
        }
    }

    public static void test02() {

        try {
            // 数据下标越界异常
            int[] nums = {1, 2, 3};
            System.out.println(nums[2]);

            // 算术异常
            int i = 1 / 1;

            // 空指针异常
            String name = null;
            System.out.println(name.equals("admin"));
        } catch (ArithmeticException | NullPointerException | ArrayIndexOutOfBoundsException e) {
            // 简写方式
            // 当有多种异常的处理方式是一致的时候,可以通过|将多个异常同时捕获
            // 当捕获到这些异常中的任意一个时进行处理
            System.out.println("捕获到了异常");
        }
    }

}
